#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
应急预案生成接口使用示例
"""

import asyncio
import json
import aiohttp

async def example_generate_plan():
    """示例：生成应急预案"""
    
    url = "http://localhost:8080/api/v1/generate_plan"
    
    # 示例1：生成网络安全事件应急预案
    data = {
        "event_type": "网络安全事件",
        "event_subtype": "数据勒索事件"
    }
    
    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(url, json=data) as response:
                if response.status == 200:
                    result = await response.json()
                    print("=== 生成的应急预案 ===")
                    print(f"状态码: {result.get('status_code')}")
                    print(f"消息: {result.get('message')}")
                    
                    plan = result.get('plan', [])
                    for item in plan:
                        print(f"\n【{item.get('field_name')}】")
                        print(item.get('content'))
                else:
                    print(f"请求失败，状态码: {response.status}")
        except Exception as e:
            print(f"请求异常: {e}")

async def example_optimize_plan():
    """示例：优化应急预案字段"""
    
    url = "http://localhost:8080/api/v1/generate_plan"
    
    # 示例2：优化特定字段
    data = {
        "event_type": "网络安全事件",
        "event_subtype": "数据勒索事件",
        "optimize_field": "应急响应处置",
        "optimize_suggest": "增加具体的操作步骤和时间要求",
        "history": [
            {
                "role": "user",
                "content": "事件类型：网络安全事件，事件子类：数据勒索事件"
            },
            {
                "role": "assistant",
                "content": "{\"安全事件监测\": \"采用实时网络流量分析工具和入侵检测系统(IDS)进行监测，结合安全信息和事件管理(SIEM)系统集中收集和分析日志数据，确保及时发现异常数据访问和加密行为。\", \"安全事件分析、定级、上报\": \"分析流程包括确认事件性质、影响范围和攻击手法；定级依据《通信网络安全事件分级分类指南》，分为特别重大、重大、较大和一般四个等级；\", \"应急响应处置\": \"立即隔离受影响系统，防止勒索软件扩散；启动备份恢复流程，确保业务连续性；通知网络安全团队进行技术处置。\", \"安全事件取证和溯源\": \"使用数字取证工具收集和分析受感染系统的日志、内存转储和文件样本；通过IP追踪、恶意代码分析和网络行为分析技术溯源攻击者；确保取证过程符合法律要求，保护证据完整性。\", \"安全事件总结、结束响应\": \"编写详细的事件总结报告，包括事件原因、处置过程、损失评估和改进措施；组织内部评审会议，分享经验教训；更新应急预案和防护措施，防止类似事件再次发生；正式结束响应活动，恢复常态运营。\"}"
            },
            {
                "role": "user",
                "content": "优化'应急响应处置',优化建议：增加具体的操作步骤和时间要求"
            }
        ]
    }
    
    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(url, json=data) as response:
                if response.status == 200:
                    result = await response.json()
                    print("\n=== 优化后的字段内容 ===")
                    print(f"状态码: {result.get('status_code')}")
                    print(f"消息: {result.get('message')}")
                    print(f"优化内容: {result.get('plan')}")
                else:
                    print(f"请求失败，状态码: {response.status}")
        except Exception as e:
            print(f"请求异常: {e}")

async def example_error_handling():
    """示例：错误处理"""
    
    url = "http://localhost:8080/api/v1/generate_plan"
    
    # 示例3：参数错误测试
    data = {
        "event_type": "网络安全事件"
        # 缺少event_subtype
    }
    
    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(url, json=data) as response:
                result = await response.json()
                print("\n=== 错误处理示例 ===")
                print(f"状态码: {result.get('status_code')}")
                print(f"错误消息: {result.get('message')}")
        except Exception as e:
            print(f"请求异常: {e}")

async def main():
    """主函数"""
    print("应急预案生成接口使用示例")
    print("=" * 50)
    
    # 运行示例
    await example_generate_plan()
    await example_optimize_plan()
    await example_error_handling()

if __name__ == "__main__":
    asyncio.run(main()) 